Go语言值接收者方法和指针接收者方法

您所在的位置:网站首页 go 方法 指针 Go语言值接收者方法和指针接收者方法

Go语言值接收者方法和指针接收者方法

2023-12-10 11:24| 来源: 网络整理| 查看: 265

        在Go语言中方法就是定义了接受者的函数,方法和函数只差了一个参数,那就是方法在 func 和标识符之间多了一个参数。接受者定义在func关键字和函数名之间:

type Person struct { name string age int } func (p Person) say() { fmt.Printf("I'm %s,%d years old\n",p.name,p.age) }

        接收者有两种,一种是值接收者,一种是指针接收者。顾名思义,值接收者,是接收者的类型是一个值,是一个副本,方法内部无法对其真正的接收者做更改;指针接收者,接收者的类型是一个指针,是接收者的引用,对这个引用的修改之间影响真正的接收者。

        先看两段代码

        代码一:

package main import "fmt" type Person struct { name string age int } func (p Person) say() { fmt.Printf("I'm %s,%d years old\n",p.name,p.age) } func (p Person) older(){ p.age = p.age +1 } func main() { var p1 Person = Person{"zhansan",16} p1.older() p1.say() //output: I'm zhangsan,16 years old var p2 *Person = &Person{"lisi",17} p2.older() p2.say() //output: I'm lisi,17 years old }

        输出:

#gosetup I'm zhansan,16 years old I'm lisi,17 years old

        代码二:

package main import "fmt" type Person struct { name string age int } func (p Person) say() { fmt.Printf("I'm %s,%d years old\n",p.name,p.age) } func (p *Person) older(){ p.age = p.age +1 } func main() { var p1 Person = Person{"zhansan",16} p1.older() p1.say() //output: I'm zhangsan,17 years old var p2 *Person = &Person{"lisi",17} p2.older() p2.say() //output: I'm lisi,18 years old }

        输出:

#gosetup I'm zhansan,17 years old I'm lisi,18 years old

        这两段代码唯一的区别就是在older()方法这,第一段代码是值接受者方法,第二段代码是指针接受者方法。

        到此 Go语言值接收者方法和指针接收者方法介绍完成。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3